#include "common.h"

#include <assert.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <stdbool.h>

#include "tests/common_test.h"

static void test_strchr(void){
    /*
char *strchr(const char *str, int c)

即在参数 str 所指向的字符串中搜索第一次出现字符 c（一个无符号字符）的位置。strchr函数包含在C 标准库 <string.h>中。

str-- 要被检索的 C 字符串。
c-- 在 str 中要搜索的字符。

返回一个指向该字符串中第一次出现的字符的指针，如果字符串中不包含该字符则返回NULL空指针。
注意，该函数式大小写区分的函数，大小字母和小写字母被看成是不一样的

NULL空指针即 0x0 ,实际上这个地址不会用于任何有效的数据。所以strchr永远不会找到了子串并返回0值
    */
    TEST_START_INFO;
    TEST_LINE_REPORT_START;

    char *target = "This is a test string";
    char *target2 = "你好，我是中国人！";
    char *index;
    int char_count;

    // 大小写敏感
    index = strchr(target, 't');
    char_count = index - target;

    assert(!strcmp("test string",index));
    assert(10 == char_count);

    index = strchr(target, 'T');
    char_count = index - target;
    assert(!strcmp(target, index));
    assert(0 == char_count);
    assert(0 < index);

    // 有多个相同字符时,返回第一个找到的指针
    index = strchr(target, 'i');
    char_count = index - target;
    assert(!strcmp("is is a test string", index));
    assert(2 == char_count);

    // 找不到时返回NULL
    index = strchr(target, 'X');
    // strchr永远不会找到了子串并返回0值
    assert(!index);
    assert(NULL == index);

    // 汉字不可以正常处理，可调试下面的代码看出问题。下面这句编译时就会警告，后面的参数应传入单个字符
    index = strchr(target2, '中');
    char_count = index - target2;

    // assert(!strcmp("中国人",index));

    TEST_END_INFO;
}

int main(int argc, char *argv[]) {
    (void) argc;
    (void) argv;

    test_strchr();


    return 0;
};